
package kaizen.nomweb;

import java.io.*;

import java.util.Vector;

import javax.servlet.*;
import javax.servlet.http.*;

// Referenced classes of package kaizen.nomweb:
//            FuncEng, utilerias

public final class FunInsertEng extends HttpServlet
{

  public FunInsertEng()
  {
  }

  public void doGet(HttpServletRequest req, 
                    HttpServletResponse resp) throws ServletException, 
                                                     IOException
  {
    resp.setContentType("text/html");
    PrintWriter out = new PrintWriter(resp.getOutputStream());
  }

  public static String fn_cIif(Vector vCond, HttpServletRequest req)
  {
    String cIif = "";
    String sCond[] = new String[6];
    sCond[0] = ">=";
    sCond[1] = "<=";
    sCond[2] = "<>";
    sCond[3] = ">";
    sCond[4] = "<";
    sCond[5] = "=";
    int total = 6;
    for (int cont = 0; cont < vCond.size(); cont++)
    {
      String s_cond = (String)vCond.elementAt(cont);
      s_cond = s_cond.trim();
      for (int i = 0; i < total; i++)
        if (s_cond.indexOf(sCond[i]) > -1)
        {
          String s_vizq = utilerias.generaValIzq(sCond[i], s_cond);
          if (s_vizq.trim().length() == 0)
            return "no existe un valor";
          double i_vizq = 0.0D;
          try
          {
            i_vizq = utilerias.aNumerico(s_vizq);
          } catch (NumberFormatException _ex)
          {
            return "el valor no es numerico";
          }
          String s_vder = utilerias.generaValDer(sCond[i], s_cond);
          if (s_vder.trim().length() == 0)
            return "no existe un valor";
          double i_vder = 0.0D;
          try
          {
            i_vder = utilerias.aNumerico(s_vder);
          } catch (NumberFormatException _ex)
          {
            return "el valor no es numerico";
          }
          System.out.println("evalua .... " + i_vizq + " " + sCond[i] + " " + 
                             i_vder);
          switch (i)
          {
          default:
            break;

          case 0: // '\0'
            if (i_vizq < i_vder)
              return s_vizq + " tiene que ser  mayorIgual  que " + s_vder;
            break;

          case 1: // '\001'
            if (i_vizq > i_vder)
              return s_vizq + " tiene que ser  menorIgual  que " + i_vder;
            break;

          case 2: // '\002'
            if (i_vizq == i_vder)
              return s_vizq + " tiene que ser  diferente  que " + i_vder;
            break;

          case 3: // '\003'
            if (i_vizq <= i_vder)
              return s_vizq + " tiene que ser  mayor  que " + i_vder;
            break;

          case 4: // '\004'
            if (i_vizq >= i_vder)
              return i_vizq + " tiene que ser  menor  que " + i_vder;
            break;

          case 5: // '\005'
            if (i_vizq != i_vder)
              return i_vizq + " tiene que ser  igual  que " + s_vder;
            break;
          }
          i = total;
        }

    }

    return cIif;
  }

  public static String fn_cIifCad(Vector vCond, 
                                  HttpServletRequest req) throws IOException
  {
    System.out.println("fn_cIifCad ");
    String cIif = "";
    String sCond[] = new String[2];
    sCond[0] = "=";
    sCond[1] = "<>";
    int total = 2;
    for (int cont = 0; cont < vCond.size(); cont++)
    {
      String s_cond = (String)vCond.elementAt(cont);
      s_cond = s_cond.trim();
      for (int i = 0; i < total; i++)
        if (s_cond.indexOf(sCond[i]) > -1)
        {
          String s_vizq = utilerias.generaValIzq(sCond[i], s_cond);
          s_vizq = s_vizq.trim();
          String s_vder = utilerias.generaValDer(sCond[i], s_cond);
          s_vder = s_vder.trim();
          if (s_vder.trim().toUpperCase().startsWith("SELECT") && 
              s_vder.trim().toUpperCase().indexOf("FROM") > 0)
          {
            s_vder = utilerias.valorSqlUni(s_vder);
            if (s_vder == null)
              s_vder = "";
          }
          System.out.println("evalua .... " + s_vizq + " " + sCond[i] + " " + 
                             s_vder);
          switch (i)
          {
          default:
            break;

          case 0: // '\0'
            if (!s_vizq.equals(s_vder))
              return "Atenci\363n, \"" + s_vizq + 
                "\" tiene que ser  igual  que \"" + s_vder + "\".";
            break;

          case 1: // '\001'
            if (s_vizq.equals(s_vder))
              return "Atenci\363n, \"" + s_vizq + 
                "\" tiene que ser  diferente  que \"" + s_vder + "\".";
            break;
          }
          i = total;
        }

    }

    return cIif;
  }

  public static boolean fn_cIifCadOr(Vector vCond, HttpServletRequest req)
  {
    boolean cIif = false;
    String sCond[] = new String[2];
    sCond[0] = "=";
    sCond[1] = "<>";
    int total = 2;
    for (int cont = 0; cont < vCond.size(); cont++)
    {
      String s_cond = (String)vCond.elementAt(cont);
      s_cond = s_cond.trim();
      for (int i = 0; i < total; i++)
        if (s_cond.indexOf(sCond[i]) > -1)
        {
          String s_vizq = utilerias.generaValIzq(sCond[i], s_cond);
          if (s_vizq.trim().length() == 0)
            return false;
          String s_vder = utilerias.generaValDer(sCond[i], s_cond);
          if (s_vder.trim().length() == 0)
            return false;
          System.out.println("evalua .... " + s_vizq + " " + sCond[i] + " " + 
                             s_vder);
          switch (i)
          {
          case 0: // '\0'
            if (s_vizq.equals(s_vder))
              cIif = true;
            break;

          case 1: // '\001'
            if (!s_vizq.equals(s_vder))
              cIif = true;
            break;
          }
          if (cIif)
            return true;
          i = total;
        }

    }

    return cIif;
  }

  private static boolean fn_cIifOrs(Vector vCond, HttpServletRequest req)
  {
    boolean cIif = false;
    String sCond[] = new String[6];
    sCond[0] = ">=";
    sCond[1] = "<=";
    sCond[2] = "<>";
    sCond[3] = ">";
    sCond[4] = "<";
    sCond[5] = "=";
    int total = 6;
    for (int cont = 0; cont < vCond.size(); cont++)
    {
      String s_cond = (String)vCond.elementAt(cont);
      s_cond = s_cond.trim();
      for (int i = 0; i < total; i++)
        if (s_cond.indexOf(sCond[i]) > -1)
        {
          String s_vizq = utilerias.generaValIzq(sCond[i], s_cond);
          if (s_vizq.trim().length() == 0)
            return false;
          double i_vizq = utilerias.aNumerico(s_vizq);
          String s_vder = utilerias.generaValDer(sCond[i], s_cond);
          if (s_vder.trim().length() == 0)
            return false;
          double i_vder = utilerias.aNumerico(s_vder);
          System.out.println("evalua .... " + i_vizq + " " + sCond[i] + " " + 
                             i_vder);
          switch (i)
          {
          case 0: // '\0'
            if (i_vizq >= i_vder)
              cIif = true;
            break;

          case 1: // '\001'
            if (i_vizq <= i_vder)
              cIif = true;
            break;

          case 2: // '\002'
            if (i_vizq != i_vder)
              cIif = true;
            break;

          case 3: // '\003'
            if (i_vizq > i_vder)
              cIif = true;
            break;

          case 4: // '\004'
            if (i_vizq < i_vder)
              cIif = true;
            break;

          case 5: // '\005'
            if (i_vizq == i_vder)
              cIif = true;
            break;
          }
          if (cIif)
            return true;
          i = total;
        }

    }

    return cIif;
  }

  private static String fn_cVal(String campo, Vector vCond, 
                                HttpServletRequest req)
  {
    String cVal = "";
    int cont = 0;
    boolean valorFecha = false;
    double i_campo = 0.0D;
    double i_compara = 0.0D;
    String valor_req = utilerias.tomaParametro(campo, req);
    if (utilerias.esFechaValida(valor_req))
    {
      try
      {
        i_campo = utilerias.convierteStringaFechaLong(valor_req);
      } catch (Exception _ex)
      {
        System.out.println("el campo " + campo + 
                           " no se pudo convertir a long");
      }
      valorFecha = true;
    } else
    {
      i_campo = utilerias.aNumerico(valor_req);
    }
    for (; cont < vCond.size(); cont++)
    {
      String s_cond = (String)vCond.elementAt(cont);
      s_cond = s_cond.trim();
      if (s_cond.startsWith(">="))
      {
        String s_compara = utilerias.generaValDer(">=", s_cond);
        if (valorFecha)
          try
          {
            i_compara = utilerias.convierteStringaFechaLong(s_compara);
          } catch (Exception _ex)
          {
            System.out.println("el valor " + s_compara + 
                               " no se pudo convertir a long");
          }
        else
          i_compara = utilerias.aNumerico(s_compara);
        if (i_campo < i_compara)
          return campo + " tiene que ser  mayorIgual  que " + s_compara;
      } else if (s_cond.startsWith("c"))
      {
        String s_compara = utilerias.generaValDer("<=", s_cond);
        if (valorFecha)
          try
          {
            i_compara = utilerias.convierteStringaFechaLong(s_compara);
          } catch (Exception _ex)
          {
            System.out.println("el valor " + s_compara + 
                               " no se pudo convertir a long");
          }
        else
          i_compara = utilerias.aNumerico(s_compara);
        if (i_campo > i_compara)
          return campo + " tiene que ser  menorIgual  que " + s_compara;
      } else if (s_cond.startsWith("<>"))
      {
        String s_compara = utilerias.generaValDer("<>", s_cond);
        if (valorFecha)
          try
          {
            i_compara = utilerias.convierteStringaFechaLong(s_compara);
          } catch (Exception _ex)
          {
            System.out.println("el valor " + s_compara + 
                               " no se pudo convertir a long");
          }
        else
          i_compara = utilerias.aNumerico(s_compara);
        if (i_campo == i_compara)
          return campo + " tiene que ser  diferente  que " + s_compara;
      } else if (s_cond.startsWith(">"))
      {
        String s_compara = utilerias.generaValDer(">", s_cond);
        if (valorFecha)
          try
          {
            i_compara = utilerias.convierteStringaFechaLong(s_compara);
          } catch (Exception _ex)
          {
            System.out.println("el valor " + s_compara + 
                               " no se pudo convertir a long");
          }
        else
          i_compara = utilerias.aNumerico(s_compara);
        if (i_campo <= i_compara)
          return campo + " tiene que ser  mayor  que " + s_compara;
      } else if (s_cond.startsWith("<"))
      {
        String s_compara = utilerias.generaValDer("<", s_cond);
        if (valorFecha)
          try
          {
            i_compara = utilerias.convierteStringaFechaLong(s_compara);
          } catch (Exception _ex)
          {
            System.out.println("el valor " + s_compara + 
                               " no se pudo convertir a long");
          }
        else
          i_compara = utilerias.aNumerico(s_compara);
        if (i_campo >= i_compara)
          return campo + " tiene que ser  menor  que " + s_compara;
      } else if (s_cond.startsWith("="))
      {
        String s_compara = utilerias.generaValDer("=", s_cond);
        if (valorFecha)
          try
          {
            i_compara = utilerias.convierteStringaFechaLong(s_compara);
          } catch (Exception _ex)
          {
            System.out.println("el valor " + s_compara + 
                               " no se pudo convertir a long");
          }
        else
          i_compara = utilerias.aNumerico(s_compara);
        if (i_campo != i_compara)
          return campo + " tiene que ser  igual  que " + s_compara;
      } else if (s_cond.startsWith("necesario:(") && 
                 s_cond.equals("necesario:()"))
        return "Atenci\363n : Falta caputurar algun campo";
    }

    return cVal;
  }

  public static String fncDec(String campo, HttpServletRequest req)
  {
    String valor = utilerias.tomaParametro(campo, req);
    try
    {
      double val = 0.0D;
      val = Double.valueOf(valor).doubleValue();
    } catch (NumberFormatException _ex)
    {
      return "El campo " + campo + " deber ser num\351rico";
    }
    return "";
  }

  public static String fncNum(String campo, HttpServletRequest req)
  {
    String valor = utilerias.tomaParametro(campo, req);
    if (valor == null)
      return "El campo " + campo + " deber ser num\351rico";
    try
    {
      double val = 0.0D;
      val = Double.valueOf(valor).doubleValue();
    } catch (NumberFormatException _ex)
    {
      return "El campo " + campo + " deber ser num\351rico";
    }
    return "";
  }

  public static String validaFuncionesInsert(String sqlInsert, String campo, 
                                             String tabla, 
                                             HttpServletRequest req, 
                                             String requerido) throws IOException
  {
    System.out.println(".:.:.: VALIDA FUNCIONES INSERT");
    System.out.println(".:.:.: slInsert " + sqlInsert);
    sqlInsert = sqlInsert.trim();
    String valor = utilerias.tomaParametro(campo.trim(), req);
    if (valor == null)
      valor = "";
    if (requerido.startsWith("n") && valor.length() == 0)
      return "";
    String vFI = "";
    String sep = "|";
    String fn = "";
    sqlInsert = FuncEng.validaSQLCombo(sqlInsert, req);
    Vector vValida = new Vector();
    String err_usr = "";
    if (sqlInsert.indexOf("--error--") > 0)
    {
      err_usr = utilerias.tomaValorLinea(sqlInsert, "--error--", "--");
      System.out.println(".:.:::::: Error del usuario: " + err_usr);
      sqlInsert = utilerias.generaValIzq("--error--", sqlInsert);
      System.out.println(".:.:::::: sqlInsert: " + sqlInsert);
    }
    if (sqlInsert.startsWith("cval="))
    {
      sqlInsert = utilerias.generaValDer("cval=", sqlInsert);
      vValida = utilerias.generaVectorStr(sqlInsert, sep);
      vFI = fn_cVal(campo, vValida, req);
    } else if (sqlInsert.startsWith("cnum"))
      vFI = fncNum(campo, req);
    else if (sqlInsert.startsWith("cdec"))
      vFI = fncDec(campo, req);
    else if (sqlInsert.startsWith("ciif="))
    {
      sqlInsert = utilerias.generaValDer("ciif=", sqlInsert);
      System.out.println("sqlInsert = " + sqlInsert);
      vValida = utilerias.generaVectorStr(sqlInsert, sep);
      vFI = fn_cIif(vValida, req);
    } else if (sqlInsert.startsWith("ciifOr="))
    {
      sqlInsert = utilerias.generaValDer("ciifOr=", sqlInsert);
      vValida = utilerias.generaVectorStr(sqlInsert, sep);
      boolean entra = fn_cIifOrs(vValida, req);
      if (entra)
        vFI = "";
      else
        vFI = "No se cumplio ninguna condicion";
    } else if (sqlInsert.startsWith("ciifCad="))
    {
      sqlInsert = utilerias.generaValDer("ciifCad=", sqlInsert);
      vValida = utilerias.generaVectorStr(sqlInsert, sep);
      vFI = fn_cIifCad(vValida, req);
    } else if (sqlInsert.startsWith("ciifCadOr="))
    {
      sqlInsert = utilerias.generaValDer("ciifCadOr=", sqlInsert);
      vValida = utilerias.generaVectorStr(sqlInsert, sep);
      boolean entra = fn_cIifCadOr(vValida, req);
      if (entra)
        vFI = "";
      else
        vFI = "No se cumplio ninguna condicion";
    } else if (sqlInsert.startsWith("cvalsql="))
    {
      if (sqlInsert.indexOf("alta=") > 0)
      {
        int edo = Integer.valueOf(req.getParameter("dic_estado")).intValue();
        if (edo == 1 || edo == 11 || edo == 113 || edo == 1131)
          sqlInsert = utilerias.generaValDer("alta=", sqlInsert);
        else
          sqlInsert = utilerias.generaValIzq("alta=", sqlInsert);
      }
      sqlInsert = utilerias.generaValDer("cvalsql=", sqlInsert);
      vValida = utilerias.generaVectorStr(sqlInsert, sep);
      vFI = fn_cIifCad(vValida, req);
    } else if (sqlInsert.startsWith("no_necesario:("))
    {
      if (utilerias.tomaParametro(campo, req) == null)
        vFI = "";
      else if (utilerias.tomaParametro(campo, req).trim().length() == 0)
        vFI = "";
      else if (!sqlInsert.equals("no_necesario:()"))
        vFI = "Atenci\363n : No es necesario capturar algun valor";
    } else if (!sqlInsert.startsWith("cfecha"))
      if (sqlInsert.toUpperCase().startsWith("FROM"))
      {
        String sql = "select * " + sqlInsert;
        String res = utilerias.valorSqlUni(sql);
        if (res == null)
          vFI = 
              "Atenci\363n : No se puede realizar el alta porque el valor del campo " + 
              campo + " no existe";
      } else if (sqlInsert.toUpperCase().startsWith("NOTFROM"))
      {
        String sql = "select *  " + sqlInsert.substring(3);
        String res = utilerias.valorSqlUni(sql);
        if (res != null)
          vFI = 
              "Atenci\363n : Algunos de los valores ya existen en otros registros.";
      } else if (sqlInsert.startsWith("ciifFrom="))
      {
        sqlInsert = utilerias.generaValDer("ciifFrom=", sqlInsert);
        if (sqlInsert.indexOf(":") > 0)
        {
          System.out.println("CIIF FROM 1 " + sqlInsert);
          String validacion = utilerias.generaValDer(":", sqlInsert);
          sqlInsert = utilerias.generaValIzq(":", sqlInsert);
          vValida = utilerias.generaVectorStr(sqlInsert, sep);
          vFI = fn_cIifCad(vValida, req);
          System.out.println("Resultado de la validacion: " + vFI);
          if (vFI.length() == 0)
          {
            System.out.println("---------- E N T R E ---------------");
            vFI = 
                validaFuncionesInsert(validacion, campo, tabla, req, requerido);
          } else
          {
            vFI = "";
          }
        }
      }
    if (vFI.length() > 0 && err_usr.trim().length() > 0)
      vFI = err_usr;
    return vFI;
  }
}
